package io.zhifei.modules.sys.system.service.member;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import io.zhifei.common.utils.PageUtils;
import io.zhifei.common.utils.R;
import io.zhifei.modules.sys.system.entity.member.MemberEntity;
import io.zhifei.modules.sys.system.form.CourseRecordParam;
import io.zhifei.modules.sys.system.form.CourseRecordResult;
import io.zhifei.modules.sys.system.form.UserCourseParam;
import io.zhifei.modules.sys.system.form.UserVideoRecordParam;
import io.zhifei.modules.sys.system.form.member.MemberFileResult;
import io.zhifei.modules.sys.system.form.member.MemberParam;
import io.zhifei.modules.sys.system.form.member.MemberResult;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 学员信息 服务类
 * </p>
 *
 * @author duke
 * @since 2020-10-10
 */
public interface MemberService extends IService<MemberEntity> {

    /**
     * 获取听课记录分页列表
     *
     * @param page  分页参数
     * @param param 查询参数
     * @return
     */
    PageUtils getCourseRecordPageList(Page page, CourseRecordParam param);

    /**
     * 获取听课记录列表
     * @param param 查询参数
     * @return
     */
    List<CourseRecordResult> getCourseRecordList(CourseRecordParam param);

    /**
     * 更新听课记录的总次数
     *
     * @param param 参数
     * @return
     */
    R updateCourseRecordNumber(CourseRecordParam param);

    /**
     * 更新学员信息
     *
     * @param param 学员信息
     */
    void updateMember(MemberParam param);

    /**
     * 查询学员信息分页列表
     *
     * @param page  分页条件
     * @param param 查询条件
     * @return
     */
    PageUtils getMemberPageList(Page page, MemberParam param);

    /**
     * 获取学员信息列表
     *
     * @param param 查询信息
     * @return
     */
    List<MemberResult> getMemberList(MemberParam param);

    /**
     * 获取学员信息详情
     *
     * @param param 查询条件
     * @return
     */
    MemberResult getMemberDetail(MemberParam param);

    /**
     * 导入学员信息
     *
     * @param file 学员信息excel
     * @return
     */
    R importMemberExcel(MultipartFile file);

    /**
     * 获取用户听课记录分页列表
     *
     * @param page   分页参数
     * @param userId 用户ID
     * @return
     */
    PageUtils getUserVideoRecordPageList(Page page, String userId);


    /**
     * 新增用户视频记录
     *
     * @param param
     */
    void addUserVideoRecord(UserVideoRecordParam param);


    /**
     * @param param
     * @param userId
     */
    void addUserCourse(UserCourseParam param);

    /**
     * 新增听课记录
     *
     * @param param
     */
    void addVideoRecord(CourseRecordParam param);

    /**
     * 获取用户所有的单个课程
     *
     * @param userId 用户ID
     * @return
     */
    List<Map<String, Object>> getSingleUserCourse(Long userId);

    /**
     * 通过多个用户课程ID批量删除用户课程
     *
     * @param ids 用户课程IDs
     */
    void deleteBatchUserCourse(String[] ids);

    /**
     * 通过用户ID删除用户所有课程
     *
     * @param userId 用户ID
     * @param classId 班级ID
     * @param courseId 课程ID
     */
    void deleteUserCourseByUserId(Long userId,Long classId,Long courseId);

    /**
     * 获取学员档案分页列表
     *
     * @param page  分页参数
     * @param param 查询参数
     * @return
     */
    PageUtils getMemberFilePageList(Page page, MemberParam param);

    /**
     * 获取学员档案列表
     *
     * @param param 查询参数
     * @return
     */
    List<MemberFileResult> getMemberFileList(MemberParam param);

}
